1000 REM *** 1010 REM *** ULTRABOOT MENUE MAKER *** 1020 REM *** 1992 MARTIN PFOST 1030 REM *** (C) 1992 HEUREKA SOFTWARE 1040 REM *** 1050 POKE 53280,14:POKE 53281,14 1060 POKE 56,49:POKE 55,255:CLR 1070 PRINT "[147]  *** [213]LTRABOOT [205]ENUE [205]AKER ***" 1080 PRINT "* 1992 [205]ARTIN [208]FOST" 1090 PRINT "* (C) 1992 [200]EUREKA [212]EACHWARE" 1100 PRINT " *** MAXIMALE [194]LOCKANZAHL : 104" 1110 PRINT "[213]LTRABOOT [205]ENUE [205]AKER ERSTELLT AUF" 1120 PRINT "[196]ISKETTE EIN [198]ILE, DAS MIT DEM MODIFI-" 1130 PRINT "ZIERTEN [213]LTRABOOT [205]AKER AUF DIE [218]IEL-" 1140 PRINT "DISKETTE ZU SCHREIBEN IST ." 1150 PRINT " *** [196]IE [204]OAD,[211]AVE,[196]IR-[210]OUTINEN WERDEN" 1160 PRINT " GELESEN ." 1170 C=0:FOR I=52992 TO 53109:READ D:POKE I,D:C=C+D:NEXT:IF C=18731 THEN 1190 1180 PRINT "??? [198]EHLER IN [196]ATA-[218]EILEN !":STOP 1190 PRINT " *** [196]IE [213]LTRABOOT-[205]ENUE-[196]ATEN WERDEN" 1200 PRINT " GELESEN ." 1210 C=0:FOR I=12800 TO 13506:READ D:POKE I,D:C=C+D:NEXT:IF C<>70818 THEN 1180 1220 REM *** EINGABE DER FILENAMEN 1230 CLR:AD=13507:DIM M%(5,20),ZT%(9,9),SB(9),SA%(9,9),N$(9) 1240 PRINT "[147] *** [199]EBEN [211]IE JETZT DIE ENTSPRECHEN-" 1250 PRINT " [198]ILES EIN ! ($=[196]IR. [210]ET=[197]NDE)" 1260 PRINT "==> [198]ILENAME [206]R.";FZ+1;" ";:A$="":INPUT A$ 1270 IF A$="$" THEN OPEN 1,8,0,A$:SYS 52992:CLOSE 1:GOSUB2730:GOTO 1240 1280 IF A$="" AND FZ=0 THEN END 1290 IF A$="" THEN 1320 1300 FZ=FZ+1:N$(FZ)=A$:IF FZ<9 THEN 1260 1310 REM *** KONTROLLE DER FILENAMEN 1320 PRINT "[147]":GOSUB 2700 1330 INPUT "==> [207]K (J/N) ";A$:IF A$<>"J" THEN 1230 1340 PRINT "[147] *** [199]EBEN [211]IE JETZT EIN, WIE DIE [198]ILES" 1350 PRINT " GESTARTET WERDEN ." 1360 PRINT " S : [211]YS" 1370 PRINT " R : [210]UN" 1380 PRINT " T : [212]OOL-[198]ILE" 1390 FOR I=1 TO FZ 1400 PRINT "[198]ILE";I;" : ";N$(I):INPUT "==> [211]TARTBEFEHL (S/R/T) ";A$ 1410 SB(I)=680:IF A$="S" THEN INPUT "==> [193]DRESSE ";SB(I) 1420 IF A$="T" THEN SB(I)=168 1430 NEXT I 1440 PRINT "[147]":FOR I=1 TO FZ 1450 PRINT "[198]ILE";I;" : ";N$(I);TAB(28); 1460 IF SB(I)=680 THEN PRINT "[210]UN":GOTO 1490 1470 IF SB(I)=168 THEN PRINT "[212]OOL-[198]ILE":GOTO 1490 1480 PRINT "[211]YS";SB(I) 1490 NEXT I 1500 INPUT "==> [207]K (J/N) ";A$:IF A$<>"J" THEN 1340 1510 REM *** EINGABE DER SAETZE 1520 SZ=0 1530 PRINT "[147] *** [199]EBEN [211]IE JETZT EIN, WELCHES [198]ILE" 1540 PRINT " ENTHALTEN SEIN SOLL ! ([210]ET=[197]NDE)" 1550 PRINT " [211]ATZ :";SZ+1;"":GOSUB 2700:I=0 1560 PRINT "==>";I+1;". [206]UMMER ";:A$="":INPUT A$ 1570 IF A$="" THEN 1600 1580 IF VAL(A$)=0 OR VAL(A$)>FZ THEN PRINT "[145]";:GOTO 1560 1590 I=I+1:ZT%(SZ+1,I)=VAL(A$):IF I<9 THEN 1560 1600 INPUT "==> [207]K (J/N) ";A$:IF A$<>"J" THEN 1530 1610 ZT%(SZ+1,0)=I:IF I<>0 THEN SZ=SZ+1:IF SZ<9 THEN 1530 1620 REM *** AUTOSTARTABFRAGE 1630 I=1 1640 IF I>SZ THEN 1720 1650 PRINT "[147]*** [199]EBEN [211]IE JETZT EIN, OB EIN [198]ILE" 1660 PRINT " AUTOMATISCH GESTARTET WERDEN SOLL !" 1670 PRINT "[211]ATZ :";I;"" 1680 FOR J=1 TO ZT%(I,0):PRINT J;". [198]ILE : ";N$(ZT%(I,J)) 1690 S=0:INPUT "==> [193]UTOSTART (J/N) ";A$:IF A$="J" THEN S=1 1700 SA%(I,J)=S:NEXT J:I=I+1:GOTO 1640 1710 REM *** SATZKONTROLLE 1720 C=32 1730 GOSUB 2840:PRINT:I=1 1740 IF I>SZ THEN 1830 1750 PRINT "";RIGHT$(STR$(I),1);"[146] ";:S=2 1760 FOR J=1 TO ZT%(I,0) 1770 D=LEN(N$(ZT%(I,J)))+1 1780 IF S+D>38 THEN PRINT:PRINT " ";:S=2 1790 IF SA%(I,J) THEN PRINT ""; 1800 PRINT N$(ZT%(I,J));"[146] ";:S=S+D 1810 NEXT J:PRINT:IF C=32 THEN PRINT 1820 I=I+1:GOTO 1740 1830 IF PEEK(214)<23 THEN 1850 1840 IF C=32 THEN C=44:GOTO 1730 1850 POKE 13041,C:GOSUB 2730:GOSUB 2840 1860 FOR I=1 TO FZ:PRINT "";RIGHT$(STR$(I),1);"[146] ";N$(I):NEXT I 1870 INPUT "==> [193]LLES [207]K (J/N) ";A$:IF A$<>"J" THEN 1230 1880 REM *** ULTRAMENUE GENERIEREN 1890 PRINT "[147] *** [213]LTRAMENUE WIRD ERZEUGT ." 1900 OF=12800-2049:FOR I=1 TO FZ:FOR J=1 TO LEN(N$(I)) 1910 POKE AD,ASC(MID$(N$(I),J,1)):AD=AD+1:NEXT J:POKE AD,0:AD=AD+1:NEXT I 1920 E1=AD-OF:FOR I=1 TO FZ:POKE AD,LEN(N$(I))+1:AD=AD+1:NEXT I 1930 POKE AD,0:AD=AD+1:E2=AD-OF:S=-1:N$(0)="" 1940 FOR I=0 TO FZ-1:S=S+LEN(N$(I))+1:POKE AD,S:AD=AD+1:NEXT I 1950 E3=AD-OF:I=1 1960 IF I>SZ THEN 2020 1970 FOR J=1 TO ZT%(I,0):E=ZT%(I,J) 1980 IF SA%(I,J) THEN E=E+16 1990 IF J=ZT%(I,0) THEN E=E+128 2000 POKE AD,E:AD=AD+1:NEXT J 2010 I=I+1:GOTO 1960 2020 POKE AD,0:AD=AD+1:E4=AD-OF 2030 S=0:I=0:ZT%(0,0)=0 2040 IF I=SZ THEN 2060 2050 S=S+ZT%(I,0):POKE AD,S:AD=AD+1:I=I+1:GOTO 2040 2060 E5=AD-OF:FOR I=1 TO FZ 2070 POKE AD+FZ*2+I-1,SB(I)-256*INT(SB(I)/256):POKE AD+FZ*3+I-1,INT(SB(I)/256) 2080 NEXT I:AD=AD+6*FZ 2090 POKE 12825,E3-256*INT(E3/256):POKE 12826,INT(E3/256) 2100 POKE 12842,PEEK(12825):POKE 12843,PEEK(12826) 2110 POKE 12858,E4-256*INT((E4-1)/256)-1:POKE 12859,INT((E4-1)/256) 2120 POKE 12865,E3-256*INT((E3-1)/256)-1:POKE 12866,INT((E3-1)/256) 2130 POKE 12947,E1-1-256*INT((E1-1)/256):POKE 12948,INT((E1-1)/256) 2140 POKE 13142,PEEK(12947):POKE 13143,PEEK(12948) 2150 POKE 13164,E2-1-256*INT((E2-1)/256):POKE 13165,INT((E2-1)/256):E4=88-6*FZ 2160 POKE 13219,E4:POKE 13224,E4+FZ:FOR I=2 TO 5:POKE 13217+6*I,I*FZ+E4:NEXT 2170 POKE 13477,6*FZ-1:POKE 13478,E5-256*INT(E5/256):POKE 13479,INT(E5/256) 2180 POKE 13480,E4+1 2190 REM *** FILES LESEN 2200 OPEN 15,8,15 2210 PRINT " *** [196]IE [198]ILES WERDEN GELESEN ." 2220 LE(0)=AD-12800:GOSUB 2810:BL(0)=BZ 2230 FOR I=1 TO FZ:PRINT " [198]ILE";I;": ";N$(I):GOSUB 2720 2240 OPEN 1,8,0,N$(I):GOSUB 2760:IF E THEN CLOSE 1:GOTO 2240 2250 GET#1,A$:IF A$="" THEN A$=CHR$(0) 2260 POKE E5+OF+I-1,ASC(A$) 2270 GET#1,A$:IF A$="" THEN A$=CHR$(0) 2280 POKE E5+OF+FZ+I-1,ASC(A$) 2290 POKE 174,AD-256*INT(AD/256):POKE 175,INT(AD/256):E1=AD:E2=BZ 2300 SYS 53048:CLOSE 1:AD=PEEK(174)+256*PEEK(175) 2310 LE(I)=AD-E1:E1=AD:GOSUB 2810:BL(I)=BZ-E2 2320 IF BZ>104 THEN PRINT "??? [218]U VIELE [194]LOECKE !":STOP 2330 NEXT I 2340 REM *** BLOECKE BERECHNEN 2350 PRINT " *** [194]ERECHNUNG DER [194]LOECKE" 2360 SD=5:GS=17 2370 IF BZ>84 THEN GS=18:SD=5 2380 IF BZ>89 THEN GS=19:SD=5 2390 IF BZ>94 THEN GS=21:SD=6 2400 T=36:S=SD+1:M%(1,0)=1:M%(1,SD+1)=1 2410 FOR I=0 TO FZ-1:FOR J=1 TO BL(I) 2420 S=S+SD:C=GS 2430 S=S+1:IF S>=GS THEN S=S-GS 2440 IF M%(T-35,S)=0 THEN 2470 2450 C=C-1:IF C>0 THEN 2430 2460 T=T+1:GOTO 2440 2470 M%(T-35,S)=1:NEXT J 2480 POKE E5+OF+4*FZ+I,T:POKE E5+OF+5*FZ+I,S:NEXT I 2490 REM *** DATENFILE ERZEUGEN 2500 PRINT " *** [213]LTRABOOT [205]ENUE SCHREIBEN" 2510 PRINT "==> [199]EBEN [211]IE JETZT DEN [206]AMEN EIN !":INPUT " [206]AME ";B$ 2520 GOSUB 2720:PRINT " *** [196]AS [196]ATENFILE WIRD ERZEUGT ." 2530 OPEN 2,8,2,B$+"+,S,W":GOSUB 2760:IF E THEN CLOSE 2:GOTO 2530 2540 S=0:FOR I=0 TO FZ-1 2550 S=S+BL(I):PRINT#2,S:PRINT#2,ABS(LE(I)-1-254*INT(LE(I)/254)):NEXT I 2560 PRINT#2,999:PRINT#2,0:CLOSE 2 2570 REM *** ULTRAMENUE SCHREIBEN 2580 PRINT " *** [213]LTRABOOT [205]ENUE WIRD GESCHRIEBEN ." 2590 OPEN 1,8,1,B$:GOSUB 2760:IF E THEN CLOSE 1:GOTO 2590 2600 PRINT#1,CHR$(1)+CHR$(8); 2610 POKE 174,0:POKE 175,50:POKE 172,E1-256*INT(E1/256):POKE 173,INT(E1/256) 2620 SYS 53073:CLOSE 1:CLOSE 15 2630 PRINT "'";B$;"' STEHT AUF DER [196]ISKETTE ." 2640 PRINT "[197]S MUSS JETZT MIT DEM MODIFIZIERTEN" 2650 PRINT "[213]LTRABOOT [205]AKER AUF DIE [218]IELDISKETTE" 2660 PRINT "GESCHRIEBEN WERDEN ." 2670 INPUT "==> [206]OCH EIN [213]LTRAMENUE-[198]ILE (J/N) ";A$:IF A$="J" THEN 1230 2680 END 2690 REM *** AUSGABE DER FILENAMEN 2700 PRINT "[198]ILES :" 2710 FOR I=1 TO FZ:PRINT "[198]ILE [206]R.";I;" : ";N$(I):NEXT I:PRINT:RETURN 2720 PRINT "==> ENTSPRECHENDE [196]ISKETTE EINLEGEN !" 2730 GET A$:IF A$="" THEN 2730 2740 RETURN 2750 REM *** DISKSTATUS TESTEN 2760 INPUT#15,E,E$,ET,ES:IF E=0 THEN RETURN 2770 PRINT "??? [196]ISK-[198]EHLER !":PRINT E;E$;ET;ES 2780 INPUT "==> [206]OCH EINMAL VERSUCHEN (J/N) ";A$:IF A$="J" THEN RETURN 2790 STOP 2800 REM *** AD AUF NAECHSTEN BLOCK 2810 BY=(AD-12800)-254*INT((AD-12800)/254):IF BY<>0 THEN AD=AD+254-BY 2820 BZ=INT((AD-12800)/254):RETURN 2830 REM *** KOPFZEILE SCHREIBEN 2840 PRINT "[147]*** [213]LTRABOOT [205]ENUE *** [205]ARTIN [208]FOST" 2850 PRINT " (C) 1992 [200]EUREKA [212]EACHWARE":PRINT "0[146] [198]ILE [211]ELECT":RETURN 2860 REM *** LOADSAVEDIRROUTINEN 2870 DATA162,1,32,198,255,32,207,255,32,207,255,169,13,32,210,255,32,207,255 2880 DATA133,255,32,207,255,5,255,208,3,76,204,255,32,207,255,170,32,207,255 2890 DATA32,205,189,169,32,32,210,255,32,207,255,240,216,32,210,255,144,246 2900 DATA162,1,32,198,255,160,0,32,207,255,145,174,230,174,208,2,230,175,166 2910 DATA144,240,241,76,204,255,198,1,162,1,32,201,255,160,0,177,174,32,210 2920 DATA255,230,174,208,2,230,175,165,174,197,172,208,239,165,175,197,173 2930 DATA208,233,230,1,76,204,255 2940 REM *** ULTRAMENUE 2950 DATA12,8,194,7,158,32,50,48,54,50,0,0,0,169,14,141,32,208,141,33,208 2960 DATA32,230,8,188,3,11,240,18,32,242,8,152,72,32,75,9,232,104,48,239,188 2970 DATA3,11,76,33,8,32,23,9,176,55,240,75,41,15,168,190,11,11,160,255,232 2980 DATA200,189,2,11,153,247,2,16,246,32,19,9,162,29,160,4,189,166,10,153 2990 DATA167,0,202,136,16,246,168,177,168,145,170,136,16,249,138,16,233,76 3000 DATA75,3,88,76,176,2,76,19,9,166,168,240,249,32,222,8,166,168,189,246 3010 DATA2,9,128,157,246,2,48,199,32,230,8,134,168,232,32,245,8,138,168,169 3020 DATA0,32,82,9,232,189,247,10,208,240,32,15,9,56,32,240,255,134,170,132 3030 DATA171,166,170,164,171,24,32,240,255,32,23,9,176,191,240,208,72,32,19 3040 DATA9,32,19,9,32,10,9,104,166,168,224,9,176,224,232,157,246,2,134,168 3050 DATA72,202,240,3,32,222,8,104,32,75,9,56,32,240,255,134,172,132,173,16 3060 DATA197,166,172,164,173,24,76,240,255,169,52,160,10,32,30,171,162,0,134 3070 DATA167,96,32,15,9,32,15,9,230,167,165,167,9,48,133,199,32,210,255,169 3080 DATA0,133,199,96,230,169,169,32,76,210,255,169,0,133,169,169,13,208,245 3090 DATA169,151,160,10,32,30,171,32,228,255,133,204,201,13,240,23,201,33 3100 DATA144,243,201,58,176,239,168,41,15,197,167,240,2,176,230,152,41,31 3110 DATA73,16,24,170,160,0,132,207,164,211,169,32,145,209,138,96,72,41,15 3120 DATA168,104,41,16,72,32,8,9,185,247,10,101,169,133,169,201,39,144,8,32 3130 DATA15,9,32,8,9,144,234,104,133,199,185,253,10,168,185,196,10,240,6,32 3140 DATA210,255,200,208,245,76,3,9,77,45,69,5,2,169,0,141,255,3,169,0,141 3150 DATA254,3,169,1,141,120,3,76,17,3,160,176,173,247,2,16,3,140,68,3,72 3160 DATA41,15,168,185,33,2,133,45,185,38,2,133,46,185,43,2,141,236,2,185 3170 DATA48,2,141,237,2,185,53,2,141,58,3,185,58,2,141,63,3,173,17,208,41 3180 DATA239,141,17,208,169,8,32,177,255,169,111,32,147,255,162,233,189,75 3190 DATA2,32,168,255,232,208,247,32,174,255,169,0,32,113,168,76,174,167,238 3200 DATA78,3,165,45,133,174,165,46,133,175,173,17,208,9,16,141,17,208,162 3210 DATA3,32,85,228,174,237,2,208,5,169,2,141,237,2,104,10,41,32,208,7,138 3220 DATA240,4,144,110,176,15,176,10,169,75,141,2,3,169,3,141,3,3,32,0,0,32 3230 DATA119,166,32,215,170,108,0,3,9,14,146,147,31,42,42,42,32,117,76,84 3240 DATA82,65,66,79,79,84,32,109,69,78,85,69,32,42,42,42,32,32,32,32,109 3250 DATA65,82,84,73,78,32,112,70,79,83,84,13,32,32,32,32,32,32,40,67,41,32 3260 DATA49,57,56,54,32,104,69,85,82,69,75,65,32,116,69,65,67,72,87,65,82 3270 DATA69,13,13,18,48,146,32,102,73,76,69,83,32,65,85,83,83,85,67,72,69 3280 DATA78,0,13,13,105,72,82,69,32,119,65,72,76,32,58,32,0,31,14,11,34,2 3290 DATA3,104,8,250,3,78,229,9,168,2,102,126,9,52,3,95,84,3,155,3,7,210,252 3300 DATA90,3